/*
 * Powered By XY
 * Since 2020
 */

package com.xy.biz.base.service;

import com.xy.biz.base.domain.bo.DictBO;
import com.xy.biz.base.domain.dto.DictPropertyDTO;
import com.xy.biz.base.domain.query.DictQuery;
import com.xy.biz.base.domain.req.*;
import com.xy.biz.base.domain.resp.ListDictItemResponse;
import com.xy.lang.domain.Result;
import com.xy.lang.domain.StringKeyValue;
import com.xy.lang.domain.treeing.TreeItem;

import java.util.List;

/**
 *
 *
 * @author zsp
 * @date 2020-5-23
 */
public interface DictService {

	/**
	 * 保存
	 * @param request 保存的字典属性值
	 * @return
	 */
	Result<?> saveDict(SaveDictRequest request);

	/**
	 * 更新名字
	 *
	 * @param request
	 */
	Result<?> updateDictName(UpdateDictRequest request);

	/**
	 * 更新
	 *
	 * @param request
	 */
	Result<?> updateDict(SaveDictRequest request);

	/**
	 * 删除
	 *
	 * @param dictId
	 */
	Result<?> deleteDict(Long dictId);

	/**
	 * 不做验证删除
	 *
	 * @param dictId
	 */
	Result<?> deleteDictNoVerify(Long dictId);

	/**
	 * 查找一个
	 *
	 * @param request
	 * @return
	 */
	DictBO getDict(GetDictRequest request);

	/**
	 * 查找一个
	 *
	 * @param request
	 * @return
	 */
	ListDictItemResponse getDictItem(GetDictByCodeRequest request);

	/**
	 * 查找多个
	 *
	 * @param query 查找条件
	 */
	List<DictBO> listDict(DictQuery query);

	/**
	 * 统计个数
	 *
	 * @param query 查找条件
	 */
	int countDict(DictQuery query);

	/**
	 *
	 * @param request
	 * @return
	 */
	List<DictPropertyDTO> listDictProperty(GetDictRequest request);

	/**
	 *
	 * @param request
	 * @return
	 */
	List<DictPropertyDTO> listDictProperties(GetDictRequest request);

	/**
	 *
	 * @param request
	 * @return
	 */
	List<ListDictItemResponse> listDictItem(ListDictItemRequest request);
	List<ListDictItemResponse> listDictItemByParent(ListDictItemRequest request);

	/**
	 *
	 * @param type
	 * @return
	 */
	List<StringKeyValue> listDictGroupItem(Integer type);

	/**
	 * 一次拿到所有数据
	 * @param type
	 * @return
	 */
	List<TreeItem> listDictGroupItemAll(Integer type);

	/**
	 * 根据分组code拿到所有数据
	 * @param request
	 * @return
	 */
	List<TreeItem> listDictGroupItemByGroupCode(ListDictItemRequest request);

	/**
	 * 修改多个字典实例父Id
	 * @param request
	 * @return
	 */
    Result<?> updateAll(UpdateDictAllRequest request);
}
